
package OpenCodes.Persistencia.MySQL.Jugador;

import OpenCodes.Persistencia.MySQL.*;
import OpenCodes.Dominio.Ciudad;
import OpenCodes.Dominio.Direccion;
import OpenCodes.Dominio.Jugador;
//import OpenCodes.Persistencia.RepositorioException;
import OpenCodes.Persistencia.RepositorioException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
//import java.util.List;

/**
 *<p>
 * IJugadorRepositorio Hereda de IRepositorioGenerico
 * </p>
 * <p>
 * JugadorRepositorio hereda de Repositorio Generico, que es una clase que contiene las operaciones genericas que se se utilizan
 * </p>
 * @author OpenCodes
 * 
 * @see RepositorioGenerico
 * 
 * @see IJugadorRepositorio 

 */
public class JugadorRepositorio extends RepositorioGenerico<Jugador> implements IJugadorRepositorio {

    public JugadorRepositorio(Connection connection) {
        super(connection);
    }

    @Override
    protected String sqlAgregar(Jugador jugador) {
        //Este metodo lee los valores del jugador
        //los gets de la clase

        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
        String fechaSql;
        fechaSql = sdf.format(jugador.getFechaNacimiento());
        
        String sql = "Insert into jugador(nombre,apellido, telefono, idciudad, calle,numero, " +
                 "piso, departamento,dni, fechanacimiento,sexo) " +
                 " values ('" + jugador.getNombre() + "'" +
                 ",'" + jugador.getApellido() + "'" +
                 ",'" + jugador.getTelefono() + "'" +
                 "," + jugador.getDireccionParticular().getCiudad().getId() +
                 ",'" + jugador.getDireccionParticular().getCalle() + "'" +
                 "," + jugador.getDireccionParticular().getNumero() +
                 ",'" + jugador.getDireccionParticular().getPiso() + "'" +
                 ",'" + jugador.getDireccionParticular().getDepartamento() + "'" +
                 "," + jugador.getDni() +
                 ",'" + fechaSql + "'" +
                 ",'" + jugador.getSexo() + "')" ;

        //String sql = "Call insertarjugador('" + jugador.getNombre().toString()+ "','" + jugador.getApellido().toString() + "','" + jugador.getTelefono() + "');";
        
        return sql;

        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    protected String sqlModificar(Jugador jugador) {
        //throw new UnsupportedOperationException("Not supported yet.");
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
        String fechaSql;
        fechaSql = sdf.format(jugador.getFechaNacimiento());

        String sql = "Update jugador " +
                "set nombre='" + jugador.getNombre() + "'" +
                ",apellido='" + jugador.getApellido() + "'" +
                ",telefono='" + jugador.getTelefono() + "'" +
                ",idciudad=" + jugador.getDireccionParticular().getCiudad().getId() +
                ",calle='" + jugador.getDireccionParticular().getCalle() + "'" +
                ",numero=" + jugador.getDireccionParticular().getNumero() +
                ",piso='" + jugador.getDireccionParticular().getPiso() + "'" +
                ",departamento='" + jugador.getDireccionParticular().getDepartamento() + "'" +
                ",dni=" + jugador.getDni() +
                ",fechanacimiento='" + fechaSql + "'" +
                ",sexo='" + jugador.getSexo() + "'" +
                 " where idjugador=" + jugador.getId() ;

        //String sql = "Call insertarjugador('" + jugador.getNombre().toString()+ "','" + jugador.getApellido().toString() + "','" + jugador.getTelefono() + "');";

        return sql;
    }

    @Override
    protected String sqlEliminar(Jugador jugador) {
       String sql="Delete from jugador where idjugador=" + jugador.getId() ;
        return sql;
    }
    @Override
    protected String sqlExiste(String[] parametrosChekeo) {
         String sql = "Select idjugador from jugador where nombre='"
                + parametrosChekeo[0] + "' and apellido='" + parametrosChekeo[1] + "'" ;
        return sql;
    }
    @Override
    protected String sqlObtenerUno(String id) {
        String sql;
        sql = "SELECT " +
                "jugador.idjugador as 'ID'," +
                "jugador.nombre as 'Nombre'," +
                "jugador.apellido as 'Apellido'," +
                "jugador.telefono as 'Telefono'," +
                "jugador.idciudad as 'IdCiudad'," +
                "ciudad.nombre as 'Ciudad'," +
                "jugador.calle as 'Calle'," +
                "jugador.numero as 'Numero'," +
                "jugador.piso as 'Piso'," +
                "jugador.departamento as 'Depto'," +
                "jugador.dni as 'Dni'," +
                "jugador.fechanacimiento as 'Fecha Nacimiento'," +
                "jugador.sexo as 'Sexo'" +
                "FROM jugador inner join ciudad on jugador.idciudad=ciudad.id " +
                "WHERE jugador.idjugador=" + id;
        return sql;
    }
    @Override
    protected String sqlObtenerAlgunos(String[] parametrosBusqueda) {
       String sql;
        sql = "SELECT " +
                "jugador.idjugador as 'ID'," +
                "jugador.nombre as 'Nombre'," +
                "jugador.apellido as 'Apellido'," +
                "jugador.telefono as 'Telefono'," +
                "jugador.idciudad as 'IdCiudad'," +
                "ciudad.nombre as 'Ciudad'," +
                "jugador.calle as 'Calle'," +
                "jugador.numero as 'Numero'," +
                "jugador.piso as 'Piso'," +
                "jugador.departamento as 'Depto'," +
                "jugador.dni as 'Dni'," +
                "jugador.fechanacimiento as 'Fecha Nacimiento'," +
                "jugador.sexo as 'Sexo'" +
                "FROM jugador inner join ciudad on jugador.idciudad=ciudad.id " +
                "WHERE jugador.nombre like '%" + parametrosBusqueda[0] + "%'" +
                " AND jugador.apellido like '%" + parametrosBusqueda[1] + "%'" ;
               
        return sql;
    }
    @Override
    protected String sqlObtenerTodos() {
         String sql;
         sql = "SELECT " +
                "jugador.idjugador as 'ID'," +
                "jugador.nombre as 'Nombre'," +
                "jugador.apellido as 'Apellido'," +
                "jugador.telefono as 'Telefono'," +
                "jugador.idciudad as 'IdCiudad'," +
                "ciudad.nombre as 'Ciudad'," +
                "jugador.calle as 'Calle'," +
                "jugador.numero as 'Numero'," +
                "jugador.piso as 'Piso'," +
                "jugador.departamento as 'Depto'," +
                "jugador.dni as 'Dni'," +
                "jugador.fechanacimiento as 'Fecha Nacimiento'," +
                "jugador.sexo as 'Sexo'" +
                " FROM jugador left outer join ciudad on jugador.idciudad=ciudad.id";

        return sql;
    }

    @Override
	public Jugador mapearFila(ResultSet resultSet) throws SQLException {
		int i = 1; // es el indice de la columna
		// ---Jugador---
		int id = resultSet.getInt(i++);
		String nombre = resultSet.getString(i++);
		String apellido = resultSet.getString(i++);
        // ver campo telefono. Agregar validacion para luego insertarlo en el constructor!
        String telefono = String.valueOf(resultSet.getString(i++));

        // ----Direccion------
        //ciudad
        int idCiudad = resultSet.getInt(i++);
        String nombreCiudad = resultSet.getString(i++);
        //calle
		String calle = resultSet.getString(i++);
        
        //numero
		int numero = resultSet.getInt(i++);
        //piso
        String piso = resultSet.getString(i++);
        

        //departamento
        String departamento = resultSet.getString(i++);
        
        // ---------------------

        //dni
        int dni = resultSet.getInt(i++);

        Date fechaNacimiento=resultSet.getDate(i++);
        /*
        try {
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault());
            formatoFecha.setLenient(false);
            fechaNacimiento= formatoFecha.parse(resultSet.getString(i++));
        } catch (ParseException e) {
            fechaNacimiento=null;
        }*/
        String sexo = String.valueOf(resultSet.getString(i++));

        Ciudad ciudad=null;
        ciudad= new Ciudad(idCiudad, nombreCiudad);

		if (calle != null || numero != 0 || piso !=null || departamento !=null) {
			Direccion direccion = new Direccion(ciudad,calle,numero,piso,departamento);
			return new Jugador(id, nombre, apellido, telefono, direccion, dni, fechaNacimiento, sexo);
		}
         
		return new Jugador(id, nombre, apellido,telefono, dni, fechaNacimiento, sexo);
       
	}

}
